package com.ztesoft.iom.adapter.server.config;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;
import org.springframework.ws.config.annotation.EnableWs;
import org.springframework.ws.config.annotation.WsConfigurerAdapter;
import org.springframework.ws.transport.http.MessageDispatcherServlet;
import org.springframework.ws.wsdl.wsdl11.DefaultWsdl11Definition;
import org.springframework.xml.xsd.SimpleXsdSchema;
import org.springframework.xml.xsd.XsdSchema;

@EnableWs
@Configuration
public class WebServiceConfig extends WsConfigurerAdapter {

    @Value("${webservice.namespace.uri}")
    private String namespaceUri;

    @Bean
    public ServletRegistrationBean messageDispatcherServlet(ApplicationContext applicationContext) {
        MessageDispatcherServlet servlet = new MessageDispatcherServlet();
        servlet.setApplicationContext(applicationContext);
        servlet.setTransformWsdlLocations(true);
        return new ServletRegistrationBean(servlet, "/iom-adapter/*");
    }

    @Bean(name = "OSSProcessSheet")
    public DefaultWsdl11Definition ossProcessSheet(XsdSchema countriesSchema) {
        DefaultWsdl11Definition wsdl11Definition = new DefaultWsdl11Definition();
        wsdl11Definition.setPortTypeName("OSSWebServicePort");
        wsdl11Definition.setLocationUri("/iom-adapter");
        wsdl11Definition.setTargetNamespace(namespaceUri);
        wsdl11Definition.setSchema(countriesSchema);
        wsdl11Definition.setServiceName("123");
        return wsdl11Definition;
    }

    @Bean(name = "BSSProcessSheet")
    public DefaultWsdl11Definition bssProcessSheet(XsdSchema countriesSchema) {
        DefaultWsdl11Definition wsdl11Definition = new DefaultWsdl11Definition();
        wsdl11Definition.setPortTypeName("BSSWebServicePort");
        wsdl11Definition.setLocationUri("/iom-adapter");
        wsdl11Definition.setTargetNamespace(namespaceUri);
        wsdl11Definition.setSchema(countriesSchema);
        return wsdl11Definition;
    }

    @Bean
    public XsdSchema indexSchema() {
        return new SimpleXsdSchema(new ClassPathResource("test.xsd"));
    }
}